#ifndef __HTTP_H__
#define __HTTP_H__

#include <ctype.h>
#include <sys/wait.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/sendfile.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <fcntl.h>
#include <unistd.h>
#include <syslog.h>
#include "cJSON.h"
#include "process.h"
#include "SQL.h"

#define SIZE 4096
#define DEBUG 1

// 接收数据
typedef struct getmsg_json
{
    double temperature; // 温度
    double humidity;    // 湿度
    double heart_rate;  // 心率
    double O2;          // 血氧
} getmsg__json_t;

// 修改设备值
typedef struct setmsg_json
{
    int flame;       // 火焰
    int infrared;    // 红外
    int ozone;       // 臭氧
    int ultraviolet; // 紫外线
    int fan;         // 风扇
    int call;        // 呼叫
} setmsg_json_t;

// 病人信息
typedef struct patientdsf
{
    int patientID;        // 病人ID
    char patientName[32]; // 病人姓名
    int patientAge;       // 病人年龄
    int patientGender;    // 病人性别
    char illness[32];     // 患病名称
    double heart_rate;    // 心率
    double O2;            // 血氧
    int roomID;           // 病房
    int doctorID;         // 医生ID
    char doctorName[32];  // 医生姓名
    char time[32];        // 记录时间
} patient_json_t;

int get_line(int sock, char *buf);                                                            // 获取请求
int handle_requests(int sock);                                                                // 处理请求
void echo_error(int sock, int err_code);                                                      // 错误处理
void clear_header(int sock);                                                                  // 清除请求头
void show_403(int sock);                                                                      // 403
void show_404(int sock);                                                                      // 404
void show_405(int sock);                                                                      // 405
void show_500(int sock);                                                                      // 500
int echo_www(int sock, const char *path, size_t s);                                           // 响应网页
int handle_request(int sock, const char *method, const char *path, const char *query_string); // 手动处理函数
int parse_and_process(int sock, const char *query_string, const char *input);                 // 解析并处理
char *set_msg(cJSON *root);                                                                   // 设置消息
char *get_msg();                                                                              // 获取消息
char *login_msg(cJSON *root);                                                                 // 登录
char *register_msg(cJSON *root);                                                              // 注册
void reply(int sock, char *msg);                                                              // 相应
char *revamp_msg(cJSON *root);                                                                // 修改密码
char *patient_msg(cJSON *root);                                                               // 病人信息

#endif
